package day05;

/*
抽象类：abstract修饰
       有抽象方法的类是抽象类。
       抽象方法就是只有声明，没有实现的方法。
       抽象类中可以有抽象的方法，也可以有普通的成员方法。
       抽象类中可以有属性。
       抽象类设计出来，主要是为了继承。子类继承该抽象类，需要实现父类的抽象方法。
 */
public class Demo01 {
    public static void main(String[] args) {
        // 抽象类无法实例化
        // Animal animal = new Animal();
        Fish fish = new Fish();
        fish.name = "Fish";
        fish.running();
        fish.eating();

        Animal animal = new Fish(); // 多态的特点
        animal.eating();
        animal.running();

    }
}

//
abstract class  Animal {
    String name;

    // 普通的方法：有声明（方法头），有实现（方法体，花括号中那部分）
    public void running() {
        System.out.println(name + " is running.");
    }

    // 抽象方法：只有声明，没有实现。
    public abstract void eating();
}
// 子类要么实现父类的抽象方法
class Fish extends  Animal {

    @Override
    public void eating() {
        System.out.println(super.name + " is eating.");
    }
}
// 子类要么定义成抽象的
abstract  class Pig extends  Animal {

}
